package com.dbms.utils;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Map;

public class ExcelGenerator {

    /**
     * 根据提供的字段数据生成Excel工作簿
     *
     * @param data 包含数据的列表，每个元素是一个Map，键为字段名，值为对应字段的值
     * @param headers 表头字段名列表
     * @return 生成的Excel工作簿的字节数组输出流
     * @throws IOException 如果在生成过程中出现I/O错误
     */
    public static ByteArrayOutputStream generateExcel(List<Map<String, Object>> data, List<String> headers) throws IOException {
        // 创建一个新的Excel工作簿，使用SXSSFWorkbook以支持大数据量的写入
        Workbook workbook = new SXSSFWorkbook();
        // 创建一个工作表
        Sheet sheet = workbook.createSheet("Sheet1");

        // 创建表头行
        Row headerRow = sheet.createRow(0);
        for (int i = 0; i < headers.size(); i++) {
            Cell cell = headerRow.createCell(i);
            cell.setCellValue(headers.get(i));
        }

        // 填充数据行
       /* for (int rowIndex = 0; rowIndex < data.size(); rowIndex++) {
            Map<String, Object> rowData = data.get(rowIndex);
            Row dataRow = sheet.createRow(rowIndex + 1);
            for (int colIndex = 0; colIndex < headers.size(); colIndex++) {
                String header = headers.get(colIndex);
                Object value = rowData.get(header);
                Cell cell = dataRow.createCell(colIndex);
                if (value!= null) {
                    if (value instanceof String) {
                        cell.setCellValue((String) value);
                    } else if (value instanceof Integer) {
                        cell.setCellValue((Integer) value);
                    } else if (value instanceof Double) {
                        cell.setCellValue((Double) value);
                    } else if (value instanceof Long) {
                        cell.setCellValue((Long) value);
                    } else {
                        cell.setCellValue(value.toString());
                    }
                } else {
                    cell.setCellValue("");
                }
            }
        }*/

        // 将工作簿转换为字节数组输出流
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        workbook.write(outputStream);
        workbook.close();

        return outputStream;
    }
}
